Systems and methods for interfacing multiple types of object identifiers and object identifier readers to multiple types of applications

ABSTRACT

A method for interfacing an object identifier reader to at least one application is disclosed. The method may include receiving object identifier data from the object identifier reader. The object identifier data may include information and formatting characters. The method may then involve identifying the information in the object identifier data. At least one application may then be identified to receive the information. Finally, the information may be sent to the at least one application.

RELATED APPLICATIONS

This application is a divisional of U.S. patent application Ser. No.10/623,747, filed Jul. 21, 2003, and now issued as U.S. Pat. No. ______which is related to and claims priority from U.S. patent applicationSer. No. 60/399,215 filed Jul. 29, 2002, for “System and Method ofInterfacing Multiple Types of Object Identifiers and Object IdentifierReaders to Multiple Types of Applications,” with inventors PaulHepworth, George Powell, and Weiyang Zhou, which are both incorporatedherein by reference.

TECHNICAL FIELD

The present invention relates generally to the field of machine-readableobject identifiers. More specifically, the present invention relates tosystems and methods for interfacing multiple types of object identifiersand object identifier readers to multiple types of applications.

BACKGROUND

Computer technology has entered many areas to simplify manual tasks andto make information more readily available. Most people use severalcomputer programs every day that greatly simplify their work day. Inaddition, through the use of a computer, vast amounts of information arereadily available. Computer software and electronic information sourcesare typically found on storage media or storage devices such as harddrives, CD-ROMs, DVD-ROMs, etc., on a local computer, on a localcomputer network or a global computer network, such as the Internet.

Software applications can be used for many purposes including assistinga person in performing his or her job. For example, word processors helpcomputer users prepare documents, spreadsheet programs help usersperform accounting functions and numerical analysis, diagnostic programsassist users in diagnosing problems, etc. There are many applicationsavailable to help users with almost any need they may have. Typically,software applications operate upon data in order to help a user. Thus,the data is somehow input into the application.

One way to input data into a software application involves the use ofmachine-readable object identifiers, such as bar codes, matrix codes,radio-frequency identification (RFID) tags, magnetic stripes, smartcards, punch cards, etc. An object identifier may be a graphical orelectromagnetic representation of data. A user may scan the objectidentifier with an object identifier reader which converts the objectidentifier into object identifier data. Typically, the object identifierreader is in electronic communication with a software applicationrunning on a computing device through a communication interface.Typically, a communication interface includes a communication port(e.g., serial port, keyboard port, etc.) and a software driverassociated with the communication port. After the object identifierreader converts the graphical code into object identifier data, ittypically sends the object identifier data to the application throughthe communication interface associated with the application. Theapplication may then use the object identifier data to accomplish one ormore tasks.

Typically, object identifier data includes both information andformatting characters. The formatting characters generally allowapplications that receive the object identifier data to process theinformation contained within the object identifier data. For example,suppose that information (e.g., a part serial number, such as“ABC000198”) is encoded into a machine-readable object identifier.Formatting characters (e.g., a descriptive tag, such as “SER”) may alsobe encoded into the object identifier. Thus, when the object identifieris read by an object identifier reader, the object identifier datareceived by an application may be “SER ABC000198”. In this example, thedescriptive tag “SER” allows an application that receives the objectidentifier data to correctly interpret “ABC000198” as a part serialnumber.

Typically, the types of formatting characters included within the objectidentifier data and the arrangement of those formatting characterswithin the object identifier data are determined by a particular objectidentifier format. Examples of different object identifier formatsinclude SPEC2000, ANSI MH10.8.3, codeXML, UPC, etc., as well as variousproprietary formats. In the above example, the object identifier datawas “SER ABC000198”. However, if the same part serial number wereencoded according to another object identifier format, the objectidentifier data may be, for example, “<part>ABC000198</part>.” In bothexamples, the information is the same (i.e., “ABC000198”). However, theformatting characters in the two examples are different because theobject identifiers were encoded according to different object identifierformats.

Presently, there are several problems associated with interfacing objectidentifiers, object identifier readers, and software applications. Forexample, an application is generally configured to recognize andinterpret the formatting characters associated with a particular objectidentifier format. If an application receives object identifier datathat includes formatting characters associated with a different objectidentifier format, the application may not be able to process the objectidentifier data.

In addition, applications are typically configured to receive objectidentifier data through a particular communication interface, and, as aresult, it is not possible for these applications to receive objectidentifier data through a different communication interface. Forexample, a serial port object identifier reader may not be usable withan application that was written for a keyboard wedge object identifierreader.

In addition, it would be beneficial to be able to add information to anobject identifier beyond what was originally expected by the applicationwithout breaking its use with the original application. Without thisability it is not practical to “phase in” new information whileretaining compatibility with applications that have not been upgraded toprocess the new information.

Finally, it would be beneficial for the single reading of a singleobject identifier to cause more than one application to take action. Forexample, this would enable an inventory tracking application and aseparate POS application, both of which are capable of receiving objectidentifier data from a communication interface, to both receive theproduct number read a single time from an object identifier by a singlereader attached to a single communication interface.

Accordingly, benefits may be realized if means were provided to addressone or more of the above problems.

BRIEF DESCRIPTION OF THE DRAWINGS

The present embodiments will become more fully apparent from thefollowing description and appended claims, taken in conjunction with theaccompanying drawings. Understanding that these drawings depict onlytypical embodiments and are, therefore, not to be considered limiting ofthe invention's scope, the embodiments will be described with additionalspecificity and detail through use of the accompanying drawings inwhich:

FIG. 1 is a block diagram of an embodiment of a system for interfacingmultiple types of object identifiers and object identifier readers tomultiple types of applications;

FIG. 2 is a block diagram illustrating an embodiment of the objectidentifier data;

FIG. 2A is a block diagram illustrating an embodiment of the objectidentifier data and supplemental information;

FIG. 3 is a flow diagram of an embodiment of a method for interfacingmultiple types of object identifiers and object identifier readers tomultiple types of applications;

FIG. 4 is a block diagram illustrating an embodiment of a codefilter/router;

FIG. 5 is a block diagram of an embodiment of the input rules;

FIG. 5A is a block diagram of another embodiment of the input rules;

FIG. 6 is a block diagram of an embodiment of an application registry;

FIG. 7 is a block diagram of an embodiment of the output rules;

FIG. 8 is a table illustrating an embodiment of the formattinginstructions;

FIG. 9 is a table which may be used to organize the formattinginstructions into groups;

FIG. 10 is another table which may be used to organize the formattinginstructions;

FIG. 11 is a block diagram of an alternative embodiment of a system forinterfacing multiple types of object identifiers and object identifierreaders to multiple types of applications;

FIG. 12 is a block diagram of an alternative embodiment of a system forinterfacing multiple types of object identifiers and object identifierreaders to multiple types of applications;

FIG. 13 is a block diagram of an alternative embodiment of a system forinterfacing multiple types of object identifiers and object identifierreaders to multiple types of applications; and

FIG. 14 is a block diagram of hardware components that may be used in anembodiment of a computing device.

DETAILED DESCRIPTION

It will be readily understood that the components of the embodiments asgenerally described and illustrated in the Figures herein could bearranged and designed in a wide variety of different configurations.Thus, the following more detailed description of the embodiments of thesystems and methods of the present invention, as represented in theFigures, is not intended to limit the scope of the invention, asclaimed, but is merely representative of the embodiments of theinvention.

Several aspects of the embodiments described herein will be illustratedas software modules stored in a computing device. As used herein, asoftware module may include any type of computer instruction or computerexecutable code located within a memory device and/or transmitted aselectronic signals over a system bus or network. A software module may,for instance, comprise one or more physical or logical blocks ofcomputer instructions, which may be organized as a routine, program,object, component, data structure, etc., that performs one or more tasksor implements particular abstract data types.

In certain embodiments, a particular software module may comprisedisparate instructions stored in different locations of a memory device,which together implement the described functionality of the module.Indeed, a module may comprise a single instruction, or manyinstructions, and may be distributed over several different codesegments, among different programs, and across several memory devices.Some embodiments may be practiced in a distributed computing environmentwhere tasks are performed by a remote processing device linked through acommunications network. In a distributed computing environment, softwaremodules may be located in local and/or remote memory storage devices.

FIG. 1 is a block diagram of an embodiment of a system 100 forinterfacing multiple types of object identifiers 102 and objectidentifier readers 104 to multiple types of applications 106. The system100 may include a computing device 108. A computing device 108, as usedherein, is any device that includes a digital processor capable ofreceiving and processing data. A computing device 108 includes the broadrange of digital computers, including hand-held computers, personalcomputers, servers, mainframes, supercomputers, microcontrollers, andthe like.

The system 100 may also include one or more object identifiers 102. Asused herein, an object identifier 102 refers to any type ofmachine-readable identifier, including a bar code, a data matrix code,an RFID tag, a magnetic stripe, a smart card, a punch card, and thelike.

The system 100 may also include one or more object identifier readers104. As used herein, an object identifier reader 104 is a device that isconfigured to read an object identifier 102 and to generate objectidentifier data 110 representing the object identifier 102. The objectidentifier data 110 generated by the object identifier reader 104 may besent to and processed by the computing device 108. Object identifierreaders 104 are commercially available and known to those skilled in theart. Examples of object identifier readers 104 include bar codescanners, matrix code scanners, RFID readers, magnetic stripe readers,etc.

Each object identifier reader 104 in the system 100 may be incommunication with the computing device 108 through a communicationinterface 112. A communication interface 112 may consist of hardware,software, or a combination of hardware and software. In one embodiment,each communication interface 112 may include a communication port (e.g.,serial port, keyboard port, etc.) and a filter driver associated withthe communication port. A filter driver is a facility for receiving datafrom a communication port, modifying it or otherwise filtering it, andthen sending the data to its appropriate destination. The filter drivermay be part of an operating system (not shown) that is running on thecomputing device 108. Windows 98 and later and Windows NT and laterderivative operating systems support filter drivers for communicationports. These filter drivers are programmed according to the MicrosoftDDK and are well known to those skilled in the art. Other operatingsystems support similar means for filtering data as part of or inconjunction with the device drivers for the communication ports.

One or more applications 106 may be running on the computing device 108.As used herein, an application 106 refers to a software module thatprocesses data for a user of the computing device 108. Each application106 may be configured to receive object identifier data 110 from one ormore of the object identifier readers 104 through a communicationinterface 112.

The computing device 108 may also include a code filter/router(hereinafter, “CFR”) 114. The CFR 114 may be a software module, as thatterm is described above. The CFR 114 may be configured to perform one ormore functions. For example, the CFR 114 may allow an application 106that is configured to receive object identifier data 110 through aspecific communication interface 112 to receive object identifier data110 from an object identifier reader 104 that is in electroniccommunication with a different communication interface 112. The CFR 114may also allow an application 106 that is configured to interpret objectidentifier data 110 in a particular object identifier format to receiveand correctly process object identifier data 110 read from an objectidentifier 102 that was encoded according to a different objectidentifier format. The CFR 114 may also allow more than one application106 to receive and process object identifier data 110 read a single timefrom a single object identifier 102. The CFR 114 may also allowinformation to be added to an object identifier 102 beyond what wasoriginally expected by the application 106 without breaking its use withthe original application 106. Various embodiments of the CFR 114 will bedescribed below.

The system 100 may also include a remote computing device 116 incommunication with the computing device 108 over a network 118. As usedherein, a network 118 refers to any system that facilitates thetransmission of data between the computing device 108 and the remotecomputing device 116. Networks 118 are known to those skilled in theart. Examples of networks 118 include a local area network, a wide areanetwork, a wireless network, the Internet, and the like.

FIG. 2 is a block diagram illustrating an embodiment of the objectidentifier data 210. As stated previously, the object identifier data210 may be generated by an object identifier reader 104 that reads anobject identifier 102. The object identifier data 210 may be sent to andprocessed by the CFR 114.

As shown, the object identifier data 210 may include information 212 andformatting characters 214. The formatting characters 214 generally allowapplications 106 that receive the object identifier data 210 to processthe information 212 contained within the object identifier data 210.Although only one piece of information 212 is shown in FIG. 2, thoseskilled in the art will understand that the object identifier data 210may include multiple pieces of information 212. Various formattingcharacters 214 may be associated with each piece of information 212. Inaddition, FIG. 2 is not meant to imply anything about how theinformation 212 and the formatting characters 214 are positionedrelative to one another. The formatting characters 214 may be positionedbefore, positioned after, and/or interspersed among the information 212.

Typically, the types of formatting characters 214 included within theobject identifier data 210 and the arrangement of those formattingcharacters 214 within the object identifier data 210 are determined by aparticular object identifier format. For example, suppose that the partnumber “12345” is encoded into an object identifier 102 which is thenread by an object identifier reader 104 to generate object identifierdata 210. If the object identifier 102 is encoded according to aparticular object identifier format, the object identifier data 210 maybe “PNR 12345”. However, if the object identifier 102 is encodedaccording to another object identifier format, the object identifierdata 210 may be “<part>12345</part>.” In both examples, the information212 is the same (i.e., “12345”). However, the formatting characters 214in the two examples are different because the object identifiers 102were encoded according to different object identifier formats.

Generally, an application 106 is compatible with one or more objectidentifier formats. That is, an application 106 may be configured torecognize and interpret the formatting characters 214 associated withone or more object identifier formats. However, an application 106 maynot be compatible with some object identifier formats. That is, anapplication 106 may not be configured to recognize and interpret theformatting characters 214 associated with some object identifierformats. If an application 106 receives information 212 that isformatted according to an object identifier format that the application106 is not compatible with, the application 106 may not be able tocorrectly process the information 212.

As shown in FIG. 2A, in some embodiments supplemental information 216about the object identifier 102 may be sent to the computing device 108.The supplemental information 216 may be in addition to the objectidentifier data 210 itself. For example, the supplemental information216 may include the type of object identifier 102 (bar code, RFID,etc.), the symbology type and version, etc. In some embodiments, thesupplemental information 216 may be inserted before the objectidentifier data 110. In other embodiments, the supplemental information216 may be inserted after and/or among the object identifier data 210.

In some embodiments, the supplemental information 216 may be generatedby and sent to the computing device 108 by the object identifier reader104. In other embodiments, the supplemental information 216 may beinferred by the communication interface 112. For example, the system 100may be configured with a first type of object identifier reader 104 a incommunication with a first communication interface 112 a, and a secondtype of object identifier reader 104 b in communication with a secondcommunication interface 112 b. A first type of supplemental information216 a may be added to object identifier data 110 a received through thefirst communication interface 112 a, and a second type of supplementalinformation 216 b may be added to object identifier data 110 b receivedthrough the second communication interface 112 b.

For example, suppose that the first type of object identifier reader 104a is a bar code reader 104 a that is in communication with the computingdevice 108 through a keyboard port 112 a, and that the second type ofobject identifier reader 104 b is an RFID reader 104 b that is incommunication with the computing device 108 through a communication port112 b. The first type of supplemental information 216 a may be added toobject identifier data 110 a that passes through the keyboard port 112a, and may identify the object identifier data 110 a as coming from abar code 102 a. The second type of supplemental information 216 b may beadded to object identifier data 110 b that passes through thecommunication port 112 b, and may identify the object identifier data110 b as coming from an RFID tag 102 b.

FIG. 3 is a flow diagram of an embodiment of a method 300 forinterfacing multiple types of object identifiers 102 and objectidentifier readers 104 to multiple types of applications 106. The CFR114 may be configured to implement the method 300.

The method 300 may begin when object identifier data 110 is received 302from an object identifier reader 104. The information 212 in the objectidentifier data 110 may then be identified 304. Various ways in whichthe information 212 may be identified 304 will be described below.

Once the information 212 in the object identifier data 110 is identified304, one or more applications 106 may be identified 306 to receive theinformation 212. In one embodiment, this may involve determining acharacteristic of the information 212 (e.g., whether the information 212represents a part number, a price, a phone number, etc.) and thenidentifying one or more applications 106 that are configured to processinformation 212 with that characteristic (e.g., applications 106 thatare configured to process part numbers, prices, phone numbers, etc.).Various ways in which a characteristic of the information 212 may bedetermined will be described below. In addition, various other ways inwhich applications 106 may be identified 306 to receive the information212 will be described below.

When one or more applications 106 have been identified 306, theinformation 212 may then be formatted 308 so that the applications 106identified in step 306 can process the information 212. As will bedescribed below, this may involve determining the format in whichparticular application 106 expects to receive object identifier data210, and then adding formatting characters 214 to the information 212that are consistent with that format. Once the information 212 isformatted 308 for a particular application 106, it 212 may then be sent310 to that application 106.

FIG. 4 is a logical block diagram illustrating an embodiment of a CFR414. The CFR 414 may include a multi-input filter 416, one or more inputrules 418, a router 420, an application registry 422, a multi-outputfilter 424, and one or more output rules 426. Each of these componentsmay be used to implement one or more of the functions of the CFR 414, aswill be explained below.

As described above, the CFR 414 may be configured to receive 302 objectidentifier data 110 from an object identifier reader 104. In oneembodiment, the object identifier data 110 may be received by themulti-input filter 416 through a communication interface 112.

Once the CFR 414 receives 302 object identifier data 110, the CFR 414may be configured to identify 304 the information 212 contained in theobject identifier data 110. In one embodiment, identifying 304 theinformation 212 in the object identifier data 110 may involve themulti-input filter 416 matching the object identifier data 110 with oneof the input rules 418, and the multi-input filter 416 following theinstructions in the input rule 418 that matches the object identifierdata 110. An embodiment of the input rules 418 and an exemplary processby which the object identifier data 110 may be matched with one of theinput rules 418 will be described below. Details about variousinstructions that may be contained in the input rules 418 will also beprovided below.

In one embodiment, if the information 212 in the object identifier data110 cannot be identified 304, the object identifier data 110 may beallowed to pass through the CFR 414 unmodified. For example, themulti-input filter 416 may be configured to send the object identifierdata 110 back to the same communication interface 112 through which it416 initially received the object identifier data 110. In an alternativeembodiment, the multi-input filter 416 may be configured to simplydiscard object identifier data 110 if it 414 cannot identify theinformation 212 contained within the object identifier data 110. Inanother embodiment, the multi-input filter 416 may be configured todiscard data 110 that it cannot identify and also to notify the userthat the data was discarded. In an alternative embodiment, themulti-input filter 416 may be configured to let the user choose whetherto pass through or discard object identifier data that the multi-inputfilter could not identify.

Once the information 212 in the object identifier data 110 is identified304, the CFR 414 may be configured to identify 306 one or moreapplications 106 to receive the information 212. In one embodiment, thismay involve the multi-input filter 416 determining a characteristic ofthe information 212 (e.g., whether the information 212 represents a partnumber, a price, a phone number, etc.), the multi-input filter 416sending the information 212 and the characteristic to the router 420,and the router 420 searching the application registry 422 to identifyone or more applications 106 that are configured to process information212 having that characteristic.

Once an application 106 has been identified 306 to receive theinformation 212, the CFR 414 may be configured to format 308 theinformation 212 so that the application 106 can process the information212. In one embodiment, this may involve the router 420 searching theapplication registry 422 to identify the object identifier formatassociated with the application 106 (i.e., the object identifier formatin which the application 106 expects to receive the information 212),the router 420 sending the information 212, the characteristic of theinformation 212 determined by the multi-input filter 416, and the objectidentifier format associated with the application 106 to themulti-output filter 424; the multi-output filter 424 searching theoutput rules 426 to identify formatting instructions associated with thecharacteristic and the object identifier format; and the multi-outputfilter 424 formatting the information 212 according to the formattinginstructions.

Once the information 212 is formatted so that a particular application106 can process the information 212, the CFR 414 may be configured tosend 310 the formatted information 212 to the application 106. In oneembodiment, this may involve the router 420 searching the applicationregistry 422 to identify the communication interface 112 associated withthe application 106 (i.e., the communication interface 112 through whichthe application 106 expects to receive the information 212); the router420 sending the communication interface 112 associated with theapplication 106 to the multi-output filter 424; and the multi-outputfilter 424 sending the formatted information 212 to the application 106through the communication interface 112 received from the router 420.

The input rules 418 and the output rules 426 are typically predefinedand may be read from a file, database, or the like. In some embodiments,the input rules 418 and the output rules 426 may be downloaded over anetwork 116 such as a local area network or the Internet. Although notexplicitly shown in FIG. 4, those skilled in the art will recognize thatthe input rules 418 and the output rules 426 may be changed in variousways. For example, an existing input rule 418 or output rule 426 may bemodified. Alternatively or in addition, new input rules 418 and/oroutput rules 426 may be added.

FIG. 5 is a block diagram of an embodiment of the input rules 518. Asshown in FIG. 5, each input rule 518 may include a pattern 520. Apattern 520 may be any sequence of one or more characters. For example,a pattern 520 may be a sequence of alphanumeric characters (e.g., PNR,123, etc.). Alternatively, a pattern 520 may be an expression thatindicates a range of alphanumeric characters (e.g., [a-d], [3-7], etc.).Alternatively still, a pattern 520 may include one or more wildcardcharacters (e.g., PR*, 12*, etc.). Numerous other patterns 520 will bereadily apparent to those skilled in the art in light of the teachingscontained herein.

Each input rule 518 may also include one or more instructions 522 toperform specified operations on object identifier data 110. For example,an input rule 518 may include an instruction 522 to match the objectidentifier data 110 against a pattern 520, to extract a portion of theobject identifier data 110 that matches a pattern 520, to extract aportion of the object identifier data 110 based on its position withinthe object identifier data 110, to insert a substring into a specifiedposition in the object identifier data 110, to delete one or alloccurrences of a specific character within the object identifier data110, to delete a specific number of characters at specific positionswithin the object identifier data 110, to convert one or all occurrencesof a character within the object identifier data 110 to anothercharacter, to translate a substring to another string, to associate atag with the information 212 in the object identifier data 110, to sendthe tag and the information 212 (referred to hereinafter as atag/information pair) to the router 420, to carry out the instructions522 contained in another input rule 518, and so forth.

As stated previously, the input rules 518 may be used to identify 304the information 212 in the object identifier data 110 received from anobject identifier reader 104. In one embodiment, some or all of theinstructions 522 in an input rule 518 may be designed to delete theformatting characters 214 from object identifier data 110 that matchesthe pattern 520 in the input rule 518. In such an embodiment,identifying the information 212 in the object identifier data 110 mayinvolve matching the object identifier data 110 with the pattern 520 inan input rule 518, and then following one or more of the instructions522 contained in the input rule 518. In some embodiments, both theobject identifier data 110 and any supplemental information 216associated with the object identifier data 110 may be matched with apattern 520 in an input rule 518.

In other embodiments, as shown in FIG. 5A, each input rule 518 a mayalso be associated with a type of supplemental information 216. Asdescribed previously, supplemental information 216 about an objectidentifier 102 may be received by the input filter 416. Thissupplemental information 216 may be in addition to the object identifierdata 110 itself. If two types of object identifiers 102 contain the sameobject identifier data 110, the supplemental information 216 may be usedto match the object identifier data 110 with the appropriate input rule518 a. For example, suppose that a UPC bar code 102 a and an RFID tag102 b contain the same object identifier data 110. As describedpreviously, a first type of supplemental information 216 a may be addedto object identifier data 110 a generated from the UPC bar code 102 a,and a second type of supplemental information 216 b may be added toobject identifier data 110 b generated from the RFID tag 102 b. Eventhough the object identifier data 110 for the two object identifiers 102is the same, the supplemental information 216 enables the input filter416 to distinguish the object identifier data 110 a generated from theUPC bar code 102 a and the object identifier data 110 b generated fromthe RFID tag 102 b. Thus, the input filter 416 is able to apply theappropriate input rule 518 a.

The input rules 418 may also be used to determine a characteristic ofthe information 212 that has been identified 304 within objectidentifier data 110. Determining a characteristic of the information 212may be one of the steps involved in identifying 306 one or moreapplications 106 to receive the information 212, as previouslymentioned. In one embodiment, an input rule 518 may include one or moreinstructions 522 to associate the information 212 with a tag thatdescribes a characteristic of the information 212. For example, if theinformation 212 in the object identifier data 110 is a part number, theinput rule 518 that matches the object identifier data 110 may includean instruction 522 to associate the information 212 with the followingtag: “part-number.” Accordingly, determining a characteristic of theinformation 212 that has been identified 304 within object identifierdata 110 may simply involve following one or more of the instructions522 contained in the input rule 518 that matches the object identifierdata 110.

Sometimes object identifier data 110 may match more than one input rule518. In one embodiment, the user may be prompted to select which inputrule 518 should be used. For example, one input rule 518 may include aninstruction 522 to match “PNR<any number of digits>”, and another inputrule 518 may include an instruction 522 to match “PN<any fourcharacters>.” If the object identifier data 110 received from the objectidentifier reader 104 is “PNR9999,” this matches both input rules 518.With the user-resolution feature, the user may be prompted to choosewhich input rule 518 should be used. In another embodiment, input rules518 that may potentially conflict may be assigned a priority so that thehigher priority rule is automatically used when the object identifierdata 110 matches more than one input rule 518. In yet anotherembodiment, the input rule 518 that matches the longer portion of theobject identifier data 110 may be automatically selected.

In some embodiments, some of the input rules 518 may be activated and/ordeactivated under certain circumstances. For example, certain inputrules 518 may be defined for items received from Supplier A, and otherinput rules 518 may be defined for items received from Supplier B. Theuser may deactivate the Supplier A input rules 518 while processing ashipment from Supplier B, and vice versa.

In one embodiment, the CFR 114 receives object identifier data 110 froman object identifier reader 104 one character at a time. When a newcharacter is received, the CFR 114 may be configured to add thecharacter to a buffer. At some point, a decision must be made as towhether the object identifier data 110 in the buffer matches an inputrule 518.

In some circumstances, it may take an indefinite period of time to makesuch a decision. This may be the case when, for example, an input rule518 includes an instruction 522 to match a pattern 520 that includes awildcard character. For example, suppose that an input rule 518 includesan instruction 522 to match “a[0-9]*b”. In this example, assume that the“*” character indicates that the previous character (or range ofcharacters) may be repeated any number of times. Further suppose thatthe object identifier data 110 in the buffer is “a12123123”. The CFR 114may be configured to wait to decide whether the object identifier data110 matches the pattern 520 until it 114 receives either a “b” oranother character that is not a number. This may take a very long time.

In one embodiment, the multi-input filter 416 may be configured to makea decision about whether the object identifier data 110 in the buffermatches a pattern 520 in an input rule 518 after a specified period ofinactivity. In other words, the multi-input filter 416 may be configuredto “time out” after a period of inactivity. In the example above, themulti-input filter 416 may decide that there is no match between the“a12123123” and the “a[0-9]*b” pattern 520 after a period of inactivity.

The time out feature may be implemented by treating a time out conditionas a special reserved input symbol (outside the normal character set)called a time out character. The time out character may be added to theobject identifier data 110 in the buffer after a period of inactivity.The time out character may be removed from the object identifier data110 when the object identifier data 110 is processed.

The following examples illustrate various types of instructions 522 thatmay be contained within the input rules 518, and how those instructions522 may be carried out on object identifier data 110 received from anobject identifier reader 104.

EXAMPLE 1

The Spec2000_PNR input rule 518 contains the following instructions 522:

rule(Spec2000_PNR_Prefix) rule(Spec2000_Data)

The Spec2000_PNR_Prefix input rule 518 contains the followinginstructions 522:

extract(“PNR”) tag(“part-number”)

The Spec2000_Data input rule 518 contains the following instructions522:

extract(“[{circumflex over ( )}/]*”) accept(extracted) extract(“/?”)

Suppose that the object identifier data 110 received from an objectidentifier reader 104 is “PNR 12345/MFR 999”. The Spec2000_PNR inputrule 518 will match “PNR 12345/”. A tag/information pair of(part-number, 12345) will be sent to the router 420. “MFR 999” will beleft in the input buffer and may be matched against another input rule518.

EXAMPLE 2

An input rule 518 contains the following instructions 522:

match(“(1-)?[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]”)deleteAll(“-“) tag(“phone-number”) accept(buffer)

Suppose that the object identifier data 110 received from an objectidentifier reader 104 is “call 1-800-228-2600 now.” The input rule 518will match “1-800-228-2600”. A tag/information pair of (phone-number,18002282600) will be sent to the router 420. The words “call” and “now”will not be recognized by the input rule 518.

EXAMPLE 3

The CodeXML_Sequence input rule 518 contains the following instructions522:

match(“<SOH>X[<RS><GS>][{circumflex over ( )}<EOT>]*[<EOT>]”)extract(“<SOH>X”) rule(CodeXML_Fields)* extract(“[<EOT>]”)

The CodeXML_Fields input rule 518 contains the following instructions522: rule(codeXML_tag)|rule(codeXML_shortCode)

The CodeXML_Tag input rule 518 contains the following instructions 522:

extract(“<RS>”) extract(“[{circumflex over ( )}/]*”) tag(extracted)extract(“/”) extract(“[{circumflex over ( )}<GS><RS><EOT>]”)accept(extracted)

The CodeXML_ShortCode input rule 518 contains the followinginstructions:

translate(“<GS>”, “@“) extract(“[{circumflex over ( )}<GS><RS><EOT>]”)tag(extracted) accept(“”)

Suppose that the object identifier data 110 received from an objectidentifier reader 104 is “<SOH>X<RS>001/John<RS>002/Doe<EOT>”. Twotag/information pairs will be sent to the router 420: (001, John) and(002, Doe).

Suppose instead that the object identifier data 110 received from anobject identifier reader 104 is “<SOH>X<GS>Abcde<EOT>”. Onetag/information pair may be sent to the router 420: (@Abcde, “”). (The“@” indicates a data reference, which may be subsequently processedaccording to the techniques described in copending U.S. application Ser.No. 10/121,347, entitled System and Method for Encoding and DecodingData and References to Data in Machine-Readable Graphical Codes, whichis hereby incorporated by reference.)

EXAMPLE 4

The PartNumber input rule 518 includes the following instructions 522:rule(PN16)|rule(PN8)

The PN16 input rule 518 includes the following instructions 522:

  match(“[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]”)   tag(“part-number”)   accept(buffer)

The PN8 input rule 518 includes the following instructions 522:

match(“[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]<timeout>”)insert(buffer, beginning, “00000000”) tag(“part-number”) accept(buffer)

Suppose that the object identifier data 110 received from an objectidentifier reader 104 is “1234567890123456”. The PN16 input rule 518will match the object identifier data 110. A tag/information pair of(part-number, 1234567890123456) will be sent to the router 420.

Suppose instead that the object identifier data 110 received from anobject identifier reader 104 is “12345678”. The PN8 input rule 518 willmatch the object identifier data 110. A tag/information pair of(part-number, 0000000012345678) will be sent to the router 420.

The input rules 418 may be implemented with a parser. This may bereadily accomplished by someone of ordinary skill in the field oflexical analysis and parsing. Tools such as Lex, Flex, Yacc, and Bisonmay be used to implement suitable parsers. Regular expression librariesand implementation techniques are also well known, as are recursivedescent, LALR, and other parsing techniques. A good reference isCompilers: Principles, Techniques, and Tools, Aho et al, Addison-Wesley,1986, which is hereby incorporated by reference in its entirety.

As stated previously, the multi-input filter 416 may be configured todetermine a characteristic of the information 212, and to send theinformation 212 and the associated characteristic to the router 420. Inone embodiment, the multi-input filter 416 may organize multipleinformation 212/characteristic pairs into a group. The information 212in the group may then be formatted 308 and sent 310 to one or moreapplications 106.

For example, the following information 212/characteristic pairs may beorganized into a group:

Information Characteristic 12345 Product ID Acme Manufacturer 11 LotNumber 2002/03/29 Date of Manufacture

If the above group of information 212/characteristic pairs are formatted308 for a web browser application 106, the formatted information 212 maybe the following URL:<http://somecompany.com/partLookup.php?id=12345&manuf=Acme&lot=11&manuf_date=20020329>. The router 420 may then send 310 the URL to the web browserapplication 106, which may then process the URL and display results tothe user.

In one embodiment, the CFR 114 may include a pre-filter associated witha particular communication interface 112. The purpose of the pre-filterwould be to preserve data that may be lost from the object identifierdata 110. For example, if the pre-filter is associated with acommunication interface 112 that includes the keyboard port, thepre-filter may be configured to preserve non-printable keyboardsequences (e.g., Alt+Tab).

For example, suppose that an object identifier reader 104 is configuredto send object identifier data 110 to the computing device 108 throughthe keyboard port, and that the object identifier reader 104 sends theobject identifier data 110 in one of the following three formats:

     key    |   shift↓ key shift↑    |   alt↓ decimal-ascii-code alt↑where: key:       ~|1|2|3|4|5|6|7|8|9|0|-|= |  q|w|e|r|t|y|u|i|o|p|[|]|\ |   a|s|d|f|g|h|j|k|l|;|’ |  z|x|c|v|b|n|m|,|.|/ |   space decimal-ascii-code:  digit | digit digit| digit digit digit (range [0, 255]) digit:    keypad0|keypad1|keypad2|keypad3|keypad4 |  keypad5|keypad6|keypad7|keypad8|keypad9The pre-filter may be configured so that any keyboard sequence that doesnot match one of these formats will not be sent to the CFR 114 butrather will pass through the pre-filter unmodified.

FIG. 6 is a block diagram of an embodiment of an application registry422. As stated previously, identifying 306 one or more applications 106to receive the information 212 contained within object identifier data110 may involve determining a characteristic 626 of the information 212and identifying one or more applications 606 that are configured toprocess information 212 having that characteristic 626.

In one embodiment, some or all of the characteristics 626 that maypotentially be associated with information 212 processed by the CFR 114may be included in a characteristic data structure 624 within theapplication registry 622. One or more applications 606 may be associatedwith each characteristic 626. In such an embodiment, identifying one ormore applications 606 that are configured to process information 212having a particular characteristic 626 may involve searching theapplication registry 622 for applications 606 associated with aparticular characteristic 626.

As shown, the application registry 622 may also include an applicationdata structure 628. Some or all of the applications 606 to which the CFR114 may send 310 information 212 may be included in the application datastructure 628. Each application 606 may be associated with one or moreobject identifier formats 630. If an application 606 is associated witha particular object identifier format 630, this means that theapplication 606 expects to receive the information 212 in that objectidentifier format 630. Examples of different object identifier formats630 include codeXML, SPEC2000, ANSI MH10.8.3, and the like, as well asvarious proprietary formats.

As stated previously, formatting 308 the information 212 so that aparticular application 606 can process the information 212 may involveidentifying the object identifier format 630 associated with theapplication 606. In one embodiment, identifying the object identifierformat 630 associated with an application 606 may involve searching thecharacteristic data structure 624 in the application registry 622 forthe object identifier format 630 associated with the application 606.

Each application 606 in the application data structure 628 may also beassociated with a communication interface 612. If an application 606 isassociated with a particular communication interface 612, this meansthat the application 606 expects to receive the information 212 throughthat communication interface 632.

As stated previously, sending 310 the formatted information 212 to anapplication 106 may involve identifying the communication interface 612associated with the application 606. In one embodiment, identifying thecommunication interface 612 associated with an application 606 mayinvolve searching the application data structure 628 in the applicationregistry 622 for the communication interface 612 associated with theapplication 606.

FIG. 7 is a block diagram of an embodiment of the output rules 726. Asshown, each output rule 726 may correspond to a particular objectidentifier format 630. The object identifier format 630 may beassociated with one or more characteristics 626 of information 212 thatmay be processed by the CFR 114. Each characteristic 626 may beassociated with one or more formatting instructions 728. Examples offormatting instructions 728 include instructions to add formattingcharacters 214 (e.g., a field identifier, a tag, a tag terminator, atag-content separator, a field terminator, a field separator, one ormore pad characters, etc.). Alternatively, formatting instructions 728may include instructions to arrange the information 212 itself in aparticular way. Numerous additional formatting instructions 728 will bereadily apparent to those skilled in the art in light of the teachingscontained herein.

As stated previously, once an application 106 has been identified 306 toreceive information 212, the CFR 414 may be configured to format 308 theinformation 212 so that the application 106 can process the information212. In one embodiment, as described above, the multi-output filter 424receives the information 212, a characteristic 626 of the information212, and the object identifier format 630 associated with theapplication 106 that is to receive the information 212. In such anembodiment, the multi-output filter 424 may then identify formattinginstructions 728 associated with the characteristic 626 and the objectidentifier format 630. Identifying formatting instructions 728 mayinvolve locating an output rule 726 that corresponds to the objectidentifier format 630 associated with the application 106, identifyingthe characteristic 626 associated with the information 212 in the outputrule 726, and identifying the formatting instructions 728 associatedwith the characteristic 626.

Once formatting instructions 728 have been identified, the multi-outputfilter 424 may then format the information 212 according to theformatting instructions 728. For example, if the formatting instructions728 include instructions to add one or more formatting characters 214 tothe information 212, the multi-output filter 424 may format theinformation 212 by adding the specified formatting characters 214 to theinformation 212. The formatted information 212 may then be sent to theapplication 106.

The output rules 726 may specify that certain object identifier data 110may not be used with certain other object identifier data 110, or thatcertain object identifier data 110 must always be used with certainother object identifier data 110. If the output rules 726 are violated,the invalid object identifier data 110 may be removed. A warning messagemay be displayed to the user and may be recorded in a log database.

In one embodiment, input rules 518 and output rules 726 may be sharedbetween separate instances of the CFR 114. For example, an input rule518 and/or an output rule 726 may be defined in one instance of the CFR114 and propagated to another instance of the CFR 114. Input rules 518and output rules 726 may be shared via a central rules server or viapeer-to-peer networking.

FIG. 8 is a table 800 illustrating an embodiment of the formattinginstructions 828. The table 800 may include a plurality of rows 830 andcolumns 832. Each row 830 may include the formatting instructions 828associated with a particular object identifier format 630 and aparticular characteristic 626. As shown, the formatting instructions 828may include instructions to add formatting characters 214 (e.g., a fieldidentifier, a tag, a tag terminator, a tag-content separator, a fieldterminator, a field separator, one or more pad characters, etc.). Theformatting instructions 828 may also include instructions to arrange theinformation 212 in a particular way (e.g., according to a content formatstring).

As discussed previously, a characteristic 626 may be associated with oneor more formatting instructions 828 in an output rule 726. In oneembodiment, this may be accomplished by associating a characteristic 626with a pointer to a particular row in a table 800, such as the table 800shown in FIG. 8.

FIG. 9 is a table 900 which may be used to organize the formattinginstructions 828 into groups. The table 900 shown in FIG. 9 includes twocolumns 902 a, b. The first column 902 a includes the names of differentsets of formatting instructions 828. The second column 902 b includesgroups into which the formatting instructions 828 may be organized.

FIG. 10 is another table 1000 which may be used to organize theformatting instructions 828. In certain embodiments, some formattinginstructions 828 may not be used with other formatting instructions 828.The table 1000 shown in FIG. 10 includes two columns 1002 a, b andmultiple rows 1004. Each column 1002 includes formatting instructions828. In one embodiment, the formatting instructions 828 in the same row1004 may not be used with one another.

FIG. 11 is a block diagram of an alternative embodiment of a system 1100for interfacing multiple types of object identifiers 1102 and objectidentifier readers 1104 to multiple types of applications 1106. In theembodiment shown in FIG. 11, the system 1110 includes a computing device1108 that includes a CFR 1114 and an application 1106. The CFR 1114includes one or more input rules 1118 and one or more output rules 1126.The CFR 1114 also includes a filter driver 1130. As describedpreviously, the filter driver 1130 is a facility for receiving data froma communication port, modifying it or otherwise filtering it, and thensending the data to its appropriate destination. Typically, the filterdriver 1130 is part of an operating system (not shown) that is runningon the computing device 1108.

As shown, the filter driver 1130 may receive object identifier data 1110from an object identifier reader 1104. The filter driver 1130 may beconfigured to determine whether the application 1106 can process theobject identifier data 1110. This may involve matching the objectidentifier data 1110 with an input rule 1118, as described previously.If the application 1106 can process the object identifier data 1110, thefilter driver 1130 may then send the unmodified object identifier data1110 to the application 1106. If the application 1106 cannot process theobject identifier data 1110, the filter driver 1130 may identify 304 theinformation 212 in the object identifier data 1110 and format 308 theinformation 212 so that the application 1106 can process the information212. This may involve identifying formatting instructions 728 in theoutput rules 1126, as described previously. The filter driver 1130 maythen send the formatted information 212 to the application 1106.

FIG. 12 is a block diagram of an alternative embodiment of a system 1200for interfacing multiple types of object identifiers 1202 and objectidentifier readers 1204 to multiple types of applications 1206. In theembodiment shown in FIG. 12, the system 1200 includes a computing device1208 that includes a CFR 1214. The CFR 1214 includes one or more inputrules 1218, one or more output rules 1226, a filter driver 1230, arouter 1220, and an application registry 1222. Two applications 1206 arerunning on the computing device 1208: a legacy application 1206 a, and anon-legacy application 1206 b. The legacy application 1206 a isconfigured to receive object identifier data 1210 from the filter driver1230. The non-legacy application 1206 b is configured to receive objectidentifier 1210 through a communication interface 112 other than thefilter driver 1230.

As shown, the filter driver 1230 may receive object identifier data 1210from an object identifier reader 1204. The filter driver 1230 may beconfigured to determine whether the legacy application 1206 a canprocess the object identifier data 1210. This may involve matching theobject identifier data 1210 with an input rule 1218, as describedpreviously. If the legacy application 1206 a can process the objectidentifier data 1210, the filter driver 1230 may then send theunmodified object identifier data 1210 to the legacy application 1206 a.If the legacy application 1206 a cannot process the object identifierdata 1210, the filter driver 1230 may format 308 the information 212 sothat the legacy application 1206 a can process the information 212.Alternatively or in addition, the filter driver 1230 may send the objectidentifier data 1210 to the router 1220. The router 1220 may beconfigured to format 308 the information 212 in the object identifierdata 1210 so that the non-legacy application 1206 b can process theinformation 212. The router 1220 may then send the formatted information212 to the non-legacy application 1206 b through a communicationinterface 112 specified in the application registry 1222.

FIG. 13 is a block diagram of an alternative embodiment of a system 1300for interfacing multiple types of object identifiers 1302 and objectidentifier readers 1304 to multiple types of applications 1306. In theembodiment shown in FIG. 13, the system 1300 includes a computing device1308 that includes a CFR 1314 and an application 1306. The CFR 1314includes one or more input rules 1318, one or more output rules 1326, afilter driver 1330, a router 1320, an application registry 1322, and aninternal sink 1340.

As shown, the filter driver 1330 may receive object identifier data 1310from an object identifier reader 1304. The filter driver 1330 may beconfigured to identify 304 the information 212 in the object identifierdata 1310. This may involve matching the object identifier data 1310with an input rule 1318, as described previously. If the information 212in the object identifier data 1310 cannot be identified 304, the filterdriver 1330 may be configured to delete the object identifier data 1310by sending it 1310 to an internal sink 1340.

If the information 212 in the object identifier data 1310 can beidentified 304, the filter driver 1330 may send the object identifierdata 1310 to the router 1320. The router 1320 may be configured toformat 308 the information 212 in the object identifier data 1310 sothat the application 1306 can process the information 212. The router1320 may then send the formatted information 212 to the application 1306through a communication interface 112 specified in the applicationregistry 1322.

FIG. 14 is a block diagram of hardware components that may be used in anembodiment of a computing device 1408. Many different types of computersystems may be used to implement the computing device 1408 illustratedherein. The diagram of FIG. 14 illustrates typical components of acomputing device 1408 including a processor 1410, memory 1412, a storagedevice 1414, and one or more communication ports 1416. A bus 1418electronically couples all of the components in the computing device1408. Each of these components is known to those skilled in the art.

It will be appreciated by those skilled in the art that more componentsmay be included in the computing device 1408. For example, several inputdevices 1418 may be included, such as a keyboard, a mouse, a joystick,etc. In addition, several output devices 1420 may be included such as adisplay screen, a printer, etc. Thus, those skilled in the art willappreciate that additional components may be added to the computingdevice 1408 without detracting from the functionality to serve as acomputing device 1408.

While specific embodiments and applications of the present inventionhave been illustrated and described, it is to be understood that theinvention is not limited to the precise configuration and componentsdisclosed herein. Various modifications, changes, and variations whichwill be apparent to those skilled in the art may be made in thearrangement, operation, and details of the methods and systems of thepresent invention disclosed herein without departing from the spirit andscope of the invention.

1. A method for interfacing an object identifier reader to anapplication, comprising: receiving object identifier data from theobject identifier reader, the object identifier data comprisinginformation formatted according to a first object identifier format;identifying the information in the object identifier data; identifyingthe application to receive the information, the application beingincompatible with the first object identifier format; formatting theinformation according to a second object identifier format, theapplication being compatible with the second object identifier format;and sending the formatted information to the application.
 2. The methodof claim 1, wherein the object identifier data comprises firstformatting characters associated with the first object identifierformat, wherein identifying the information comprises deleting the firstformatting characters from the object identifier data, and whereinformatting the information according to the second object identifierformat comprises adding second formatting characters to the information,the second formatting characters being associated with the second objectidentifier format.
 3. A system for interfacing an object identifierreader to an application, comprising: the object identifier reader; anda computing device comprising: a communication interface in electroniccommunication with the object identifier reader; a processor; memory inelectronic communication with the processor; the application stored inthe memory; a software module stored in the memory, the software modulebeing configured to implement a method comprising: receiving objectidentifier data from the object identifier reader, the object identifierdata comprising information formatted according to a first objectidentifier format; identifying the information in the object identifierdata; identifying the application to receive the information, theapplication being incompatible with the first object identifier format;formatting the information according to a second object identifierformat, the application being compatible with the second objectidentifier format; and sending the formatted information to theapplication.
 4. The system of claim 3, wherein the object identifierdata comprises first formatting characters associated with the firstobject identifier format, wherein identifying the information comprisesdeleting the first formatting characters from the object identifierdata, and wherein formatting the information according to the secondobject identifier format comprises adding second formatting charactersto the information, the second formatting characters being associatedwith the second object identifier format.
 5. A computer-readable mediumfor storing program data, wherein the program data comprises executableinstructions for implementing a method comprising: receiving objectidentifier data from an object identifier reader, the object identifierdata comprising information formatted according to a first objectidentifier format; identifying the information in the object identifierdata; identifying an application to receive the information, theapplication being incompatible with the first object identifier format;formatting the information according to a second object identifierformat, the application being compatible with the second objectidentifier format; and sending the formatted information to theapplication.
 6. The computer-readable medium of claim 5, wherein theobject identifier data comprises first formatting characters associatedwith the first object identifier format, wherein identifying theinformation comprises deleting the first formatting characters from theobject identifier data, and wherein formatting the information accordingto the second object identifier format comprises adding secondformatting characters to the information, the second formattingcharacters being associated with the second object identifier format.